//
//  ZXXEmoticonTools.swift
//  M-Weibo
//
//  Created by ZXX on 16/4/25.
//  Copyright © 2016年 ZXX. All rights reserved.
//

import UIKit

// 最多显示的列数
let ZXXEmoticonMaxCol = 7
// 最多显示的行数
let ZXXEmoticonMaxRow = 3
// 最多显示的表情个数
let ZXXEmoticonMaxCount = ZXXEmoticonMaxCol * ZXXEmoticonMaxRow - 1


class ZXXEmoticonTools: NSObject {
    //全局访问点
    static let sharedZXXEmoticonTools: ZXXEmoticonTools = ZXXEmoticonTools()
    //读取表情的bundle文件
    lazy var emoticonBundle: NSBundle = {
        let path = NSBundle.mainBundle().pathForResource("Emoticons.bundle", ofType: nil)!
        return NSBundle(path:path)!
    }()
    // 默认表情
    lazy var defaultEmoticon:[ZXXEmoticon] = {
        return self.getEmoticons("default/")
    }()
    
    // Emoji表情
    lazy var emojiEmoticon:[ZXXEmoticon] = {
        return self.getEmoticons("emoji/")
    }()
    
    // 浪小花表情
    lazy var lxhEmoticon:[ZXXEmoticon] = {
        return self.getEmoticons("lxh/")
    }()
    // emoticon三维表情数组
    lazy var allEmoticons: [[[ZXXEmoticon]]] = {
        return [
            self.getEmoticonGroup(self.defaultEmoticon),
            self.getEmoticonGroup(self.emojiEmoticon),
            self.getEmoticonGroup(self.lxhEmoticon)]
    }()

    
    //  MARK: - 把一维数组截取成二维数组
    func getEmoticonGroup(emoticon: [ZXXEmoticon]) -> [[ZXXEmoticon]]{
        /*
         loc 0  19
         loc 20 39
         
         loc
         */
        // 计算我们的表情有多少页
        let pageCount = (emoticon.count + ZXXEmoticonMaxCount - 1) / ZXXEmoticonMaxCount
        // 定义一个临时数组保存一维数组数据
        var tempArray: [[ZXXEmoticon]] = [[ZXXEmoticon]]()
        for index in 0..<pageCount{
            // 位置(100)
            let loc = index * ZXXEmoticonMaxCount
            // 长度
            var len = ZXXEmoticonMaxCount
            // 因为我们的默认表情有108个 会越界
            if loc + len > emoticon.count{
                len = emoticon.count - loc
            }
            // range
            let range = NSMakeRange(loc, len)
            // 截取数组
            let emoticons =  (emoticon as NSArray).subarrayWithRange(range) as! [ZXXEmoticon]
            // 添加一维数组
            tempArray.append(emoticons)
        }
        return tempArray
    }


    
    
    
    //  MARK: -  获取一维数组 每一页表情数组
    func getEmoticons(path: String) -> [ZXXEmoticon] {
        let file = emoticonBundle.pathForResource("\(path)info.plist", ofType: nil)!
        // 通过路径得到plist文件的数组
        let array = NSArray(contentsOfFile: file)!
        //定义临时数组保存表情
        var tempArray: [ZXXEmoticon] = [ZXXEmoticon]()
        //遍历数组 字典转模型
        for dict in array {
            let emoticon = ZXXEmoticon(dict: dict as! [String: AnyObject])
            // 设置全路径
            emoticon.path = path
            //把模型添加到数组中
            tempArray.append(emoticon)
            
        }
        return tempArray
        
    }
    

}
